tg-me.com/cpp_geek/328
Create:
Last Update:
Last Update:
Зачем [[nodiscard]]
нужен не только для возврата значения
Если ты думаешь, что [[nodiscard]]
— это просто защита от игнора Result
, то вот фокус: его можно вешать и на классы, и на функции, и даже на enum — и это реально помогает избежать багов.
Пример:
struct [[nodiscard]] Error {
std::string message;
};
Error do_something() {
return {"Что-то пошло не так"};
}
void foo() {
do_something(); // warning: ignoring return value of nodiscard type
}
А теперь магия с методами:
struct Connection {
[[nodiscard]] bool is_valid() const {
return valid_;
}
private:
bool valid_ = false;
};
void check_connection(const Connection& conn) {
conn.is_valid(); // warning: result of 'is_valid' is unused
}
📌 Даже если функция возвращает
bool
— компилятор предупредит, если ты его проигнорируешь. Это круто, когда метод что-то проверяет, ищет или сигналит об ошибке — и ты точно не хочешь забыть проверить результат.⚠️ Но аккуратно:
[[nodiscard]]
не бросает исключения и не делает функцию безопасной. Это подсказка компилятору и твой напарник по коду.Если хочешь писать более надёжный и самодокументируемый код — юзай
[[nodiscard]]
не только по дефолту, а осознанно.➡️ @cpp_geek
BY C++ geek
Warning: Undefined variable $i in /var/www/tg-me/post.php on line 283
Share with your friend now:
tg-me.com/cpp_geek/328